# -*- coding: utf-8 -*-
# time: 2025/5/14 13:49
# file: split01.py
# author: hanson
"""
https://www.langchain.com.cn/docs/how_to/recursive_text_splitter/
按字符递归分割文本
"""
from langchain_text_splitters import RecursiveCharacterTextSplitter, CharacterTextSplitter

file = r"F:\workspace\py_project\intellect\llm\data\tsData.txt"

# Load example document
with open(file, encoding="utf-8") as f:
    state_of_the_union = f.read()

# 按字符递归分割文本RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
        # Set a really small chunk size, just to show.
        chunk_size=100,     # chunk size 块大小
        chunk_overlap=20,   # overlap between chunks 块之间的重叠 重叠的块有助于减轻在块之间划分上下文时信息的丢失。
        length_function=len,    # 长度函数用于 确定块大小的函数
        is_separator_regex=False,   #分隔符列表（默认为 ['\n\n', '\n', ' ', '']）是否应被解释为正则表达式。
    )
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print("==============")
print(texts[1])

print("-----------------------------------------")
# 按字符分割
"""
separator : 定义用于分割文本的分隔符（默认为 "\n\n"，即两个换行符）。
分割时优先按 separator 切分，如果切分后的块仍大于 chunk_size，再按字符进一步分割。
例如：separator="。" 会按中文句号分割文本。
如果 chunk_size 远大于单个句子的长度，CharacterTextSplitter 会优先合并多个句子，直到接近 chunk_size 才分割。即 separator="。" 失效
"""
text_splitter2 = CharacterTextSplitter(
    separator="。",
    chunk_size=200,
    chunk_overlap=20,
    #length_function=len,
    is_separator_regex=True,
)
texts2 = text_splitter2.create_documents([state_of_the_union])
print(texts2[0].page_content)
print("****************************")
print(texts2[1].page_content)


print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
# 示例文本（用你的实际文本替换）
sample_text = "这是一个句子。这是另一个句子！这是第三个句子？"

# 分割器配置 方法 2：改用 RecursiveCharacterTextSplitter（推荐）
text_splitter = RecursiveCharacterTextSplitter(
    separators=["。", "！", "？"],  # 按优先级尝试分割
    chunk_size=10,        # 较小的值便于观察
    chunk_overlap=0,
    is_separator_regex=False,
)

# 执行分割
texts = text_splitter.create_documents([sample_text])

# 查看结果
for i, text in enumerate(texts):
    print(f"Chunk {i}: {text.page_content}\n---")